package com.treeroot.commonutils.AOP;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * @Description:  自定义限流注解
 * @Author:treeRoot
 * @Email:553503639@qq.com
 * @Date: Create in 11:27 / 2022/6/23
 */
@Retention(RetentionPolicy.RUNTIME)//Retention修饰注解，用来表示注解的生命周期，生命周期的长短取决于@Retention的属性
//注解不仅被保存到class文件中，jvm加载class文件之后，仍然存在；
//这3个生命周期分别对应于：Java源文件(.java文件) —> .class文件 —> 内存中的字节码。
@Target({ElementType.METHOD})//是原注解,用来修饰注解的作用范围,可选择的值以数组的形式传入   （用于描述方法）
@Documented//表明这个注解应该被 javadoc工具记录
public @interface Limit {
    /**
     * 资源的key,唯一
     * 作用：不同的接口，不同的流量控制
     */
    String key() default "";

    /**
     * 最多的访问限制次数
     */
    double permitsPerSecond () ;

    /**
     * 获取令牌最大等待时间
     */
    long timeout();

    /**
     * 获取令牌最大等待时间,单位(例:分钟/秒/毫秒) 默认:毫秒
     */
    TimeUnit timeunit() default TimeUnit.MILLISECONDS;

    /**
     * 得不到令牌的提示语
     */
    String msg() default "系统繁忙,请稍后再试.";
}
